home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / pdc / libsrc / stdlib / strtosud.c < prev    next >
C/C++ Source or Header  |  1990-04-06  |  2KB  |  66 lines

  1. /*
  2.  * Libraries and headers for PDC release 3.3 (C) 1989 Lionel Hummel.
  3.  * PDC Software Distribution (C) 1989 Lionel Hummel and Paul Petersen.
  4.  * PDC I/O Library (C) 1987 by J.A. Lydiatt.
  5.  *
  6.  * This code is freely redistributable upon the conditions that this 
  7.  * notice remains intact and that modified versions of this file not
  8.  * be included as part of the PDC Software Distribution without the
  9.  * express consent of the copyright holders.  No warrantee of any
  10.  * kind is provided with this code.  For further information, contact:
  11.  *
  12.  *  PDC Software Distribution    Internet:                     BIX:
  13.  *  P.O. Box 4006             or hummel@cs.uiuc.edu            lhummel
  14.  *  Urbana, IL  61801-8801       petersen@uicsrd.csrd.uiuc.edu
  15.  */
  16.  
  17. /* strtosud - parses an unsigned scaled double ... */
  18.  
  19. #include <stddef.h>
  20. #include <ctype.h>
  21.  
  22. /* If (base < 1), strtosud returns the number as being right of the base
  23.  * point.  eg, when the base is .1,  123456 is returned as 0.123456.
  24.  */
  25.  
  26. double strtosud(string, ptr, base)
  27. char *string;
  28. char **ptr;
  29. double base;
  30. {
  31.     char *strptr = string;
  32.     double retval = 0.0;
  33.     double obase = base;
  34.     int i = 0;
  35.     char c;
  36.  
  37.     obase = base;
  38.  
  39.     while (isspace(c = *strptr))
  40.         strptr++;
  41.  
  42.     while ((c = *strptr) != 0) {
  43.         if (isdigit(c)) {
  44.             i++;
  45.             strptr++;
  46.             if (obase > 1)
  47.                 retval = (retval*base) + (c-'0');
  48.             else {
  49.                 retval += base * (c-'0');
  50.                 base *= obase;
  51.                 }
  52.             }
  53.         else
  54.             break;
  55.         }
  56.  
  57.     if (ptr != NULL) {
  58.         if (i > 0)
  59.             *ptr = strptr;
  60.         else
  61.             *ptr = string;
  62.         }
  63.  
  64.     return(retval);
  65. }
  66.